NixOS Modules
from nixOS
モジュールは attributes か、attributtes を返す関数である
NixOS configuration のスキーマには、別のモジュールを取り込むための import attribute がある
https://nix.dev/tutorials/module-system/deep-dive#splitting-modules
import attribute は builtins.import とは異なる
まずは一通りこの辺り読むと良い
1. A basic module — nix.dev documentation
Writing NixOS Modules
NixOS Manual
NixOS modules - NixOS Wiki
デフォルト?のモジュールはここで定義されている
nixpkgs/nixos/modules at c44e7ddbed3f56365a6b0ac85f9f95c60bf82177 · NixOS/nixpkgs
モジュールの option を検索できるページもある
https://search.nixos.org/flakes?channel=unstable&sort=relevance&type=options&query=bitcoin
options 配下に services を追加するのは慣習らしい
nixos-optionというコマンドがあるみたい
mkPackageOption
module で使うパッケージを指定するオプション
NixOS Manual
configは option で定義されている値を実際に設定する属性
config というスコープ?は省略してもいいらしい?
NixOS modules - NixOS Wiki
あるモジュールで import した他のモジュールの option もここで定義することができる
モジュールが関数の場合
https://nixos.wiki/wiki/NixOS_modules#Function にあるように引数が渡される
モジュールを import する時に実行される evalModule が渡しているらしい
Nixpkgs Reference Manual
他の値を渡せる仕組みもある
Appendix A. Configuration Options
2. Module system deep dive — nix.dev documentation
NixOS Manual
https://nixos.org/manual/nixos/stable/options.html#ch-options
submodule
option をネストしたり、同じ option を使いまわしたい時に使える
実例
nixpkgs/nixos/modules/services/networking/bitcoind.nix at nixos-24.11 · NixOS/nixpkgs
Understanding NixOS Modules and Declaring Options
submodule 関数?は config と name を引数に取ることができる
module は関数であることができる
lib を引数に撮ることがあり、それは nixpkgs.lib である
1. A basic module — nix.dev documentation
lib.types が使えるのはこれが理由
Option Types
Options Types — NixOS Manual documentation